package com.young.ums.service;

import com.young.common.util.Page;
import com.young.ums.model.Dept;
import com.young.ums.model.Role;
import com.young.ums.model.RoleDept;
import java.util.List;

/**
* 角色的可用单位关联信息服务接口
* Created by imrookie on 2018-11-13.
*/
public interface IRoleDeptService {

    /**
     * 查询
     * @param obj
     * @return
     */
    List<RoleDept> getList(RoleDept obj);

    /**
     * 分页查询
     * @param obj
     * @param page
     * @return
     */
    List<RoleDept> getPage(RoleDept obj, Page page);

    /**
     * 查询单条
     * @param id
     * @return
     */
    RoleDept get(String id);

    /**
     * 统计数量
     * @param obj
     * @return Integer 满足xx条件的数据有多少条
     */
    int count(RoleDept obj);

    /**
     * 修改
     * @param obj
     * @return
     */
    int update(RoleDept obj);

    /**
     * 删除
     * @param id
     * @return
     */
    int delete(String id);

    /**
     * 批量删除
     * @param idArr
     * @return
     */
    int delete(String[] idArr);

    /**
     * 删除角色相关的所有关联信息
     * @param roleId 角色id
     * @return
     */
    int deleteByRoleId(String roleId);

    /**
     * 删除单位相关联的所有关联信息
     * @param deptId 单位id
     * @return
     */
    int deleteByDeptId(String deptId);

    /**
     * 插入
     * @param obj
     * @return
     */
    int insert(RoleDept obj);

    /**
     * 批量插入
     * @param list
     * @return
     */
    int batchInsert(List<RoleDept> list);

    /**
     * 批量关联单位(N)到角色(1)
     * @param roleId 角色id
     * @param deptIds 单位id数组
     * @return
     */
    int relevanceDepts2Role(String roleId, String[] deptIds);

    /**
     * 判断指定角色和单位是否存在关联
     * @param roleId 角色id
     * @param deptId 单位id
     * @return
     */
    boolean isRelevanced(String roleId, String deptId);

    /**
     * 根据角色id查询单位id集合
     * @param roleId 角色id
     * @return
     */
    List<String> getDeptIdListByRoleId(String roleId);

    /**
     * 根据单位id查询角色id集合
     * @param deptId 单位id
     * @return
     */
    List<String> getRoleIdListByDeptId(String deptId);

    /**
     * 根据单位id集合查询关联的角色id集合
     * @param companyIds 单位id集合
     * @return
     */
    List<String> getRoleIdListByDeptIds(List<String> companyIds);

    /**
     * 根据角色id查询关联的单位信息
     * @param roleId 角色id
     * @return
     */
    List<Dept> getCompanyListByRoleId(String roleId);

    /**
     * 根据单位id集合查询关联的角色信息
     * @param companyIds 单位id集合
     * @return
     */
    List<Role> getRoleListByCompanyIds(List<String> companyIds);

}